package com.tianhao.luo.nouse.v2;

/**
 * @ClassName: AbstractZombie
 * @Description: 将僵尸抽象化，每个僵尸都有造型、攻击和移动能力；现在将这种能力抽象成能力属性。并且提供对应的方法
 * 交给子类实现来调用这个能力属性。
 * 当子类继承抽象僵尸时，只需要传入想要的获得的能力对象，那么这个子类便具有了这个能力，且方便替换。
 * 只需要替换能力对象，就能实现。
 * @author: tianhao.luo@hand-china.com
 * @date: 2020/7/1  17:53
 */
abstract class AbstractZombie{
    /**
     * 外观
     */
    abstract public void display();
    Moveable moveable;
    Attackable attackable;

    /**
     * 移动
     */
    abstract void move();

    /**
     * 攻击
     */
    abstract void attack();

    public Moveable getMoveable() {
        return moveable;
    }

    public void setMoveable(Moveable moveable) {
        this.moveable = moveable;
    }

    public Attackable getAttackable() {
        return attackable;
    }

    public void setAttackable(Attackable attackable) {
        this.attackable = attackable;
    }

    public AbstractZombie(Moveable moveable, Attackable attackable) {
        this.moveable = moveable;
        this.attackable = attackable;
    }
}
